const fs = require('fs');
const path = require('path');

// 配置参数
const config = {
  targetDir: 'C:/Users/lijinbei/Desktop/files', // 要监控的目录
  jsonFile: 'now.json', // JSON格式目录结构文件
  pollInterval: 10 * 60 * 1000, // 10分钟轮询间隔(毫秒)
//   pollInterval: 10 * 1000, // 测试配置10秒轮询间隔(毫秒)
  ignorePatterns: [] // 忽略模式
};

// 生成目录结构对象
function generateDirectoryStructure(dir,timeLimit,level) {
  const name = path.basename(dir);
  const stats = fs.statSync(dir);
  const item = {
    name: name,
    path: dir,
    type: 'directory',
    "mtime": stats.mtimeMs.toString(),
    children: []
  };

  try {
    const items = fs.readdirSync(dir);

    for( const childName of items){
         
      const fullPath = path.join(dir, childName);
      try {
        const stats = fs.statSync(fullPath);
        
        if(level ==0){
            if(stats.mtime < timeLimit){
                continue;
            }
        }

        if (stats.isDirectory()) {
          item.children.push(generateDirectoryStructure(fullPath,timeLimit,level+1));
        } else {
          item.children.push({
            name: childName,
            path: fullPath,
            type: 'file',
            mtime: stats.mtimeMs.toString()
          }); 
        }
      } catch (e) {
        console.error(`无法访问 ${fullPath}:`, e.message);
      }
    }
  } catch (e) {
    console.error(`无法读取目录 ${dir}:`, e.message);
  }

  return item;
}

// 更新目录结构JSON文件
function updateStructureJson() {
    const date = new Date();
    const timestamp = date.toISOString();
  const timeLimit = Date.now() - 28800000 ;
  const structure = generateDirectoryStructure(config.targetDir,timeLimit,0);

  try {
    fs.writeFileSync(
      config.jsonFile, 
      JSON.stringify(structure, null, 2),
      'utf8'
    );
    console.log(`目录结构已更新: ${timestamp}`);
  } catch (e) {
    console.error('写入JSON文件失败:', e.message);
  }
}

// 初始化JSON文件
if (!fs.existsSync(config.jsonFile)) {
  updateStructureJson();
} else {
  console.log(`使用现有JSON文件: ${config.jsonFile}`);
}

// 轮询监控函数
function startPolling() {
  console.log(`开始轮询监控目录: ${config.targetDir}`);
  console.log(`轮询间隔: ${config.pollInterval / 1000}秒`);
  console.log('监控内容为8小时内创建的文件');
  console.log(`目录结构将保存到: ${path.resolve(config.jsonFile)}`);

  // 立即执行第一次检查
  updateStructureJson();
  
  // 设置定时器
  const pollTimer = setInterval(updateStructureJson, config.pollInterval);
  
  // 优雅退出
  process.on('SIGINT', () => {
    clearInterval(pollTimer);
    console.log('监控已停止');
    process.exit();
  });
}

// 启动轮询监控
startPolling();